/*
 *  Trabalho 5 - Processamento de Imagens (scc0251)
 *  Prof. Moacir P. Ponti Jr --- ICMC/USP
 *
 *  Descritores de cor e Segmentacao
 *
 *  Autor: Vinicius de Oliveira Boen	7152163
 *  Autor: Lohan Delponte Bassi   	6792972
 */

#include <stdlib.h>
#include <stdio.h>
#include <cv.h>
#include <highgui.h>
#include "descriptors.h"

void descritores(IplImage* img1, IplImage* img2, int numQnt) {

   double * GCH1 = calloc(numQnt, sizeof(double));
   double * GCH2 = calloc(numQnt, sizeof(double));
   
   printf("Calculating image descriptors...\n");
   GCH(img1, GCH1);
   GCH(img2, GCH2);
   
   double diff12 = dEuclid(GCH1, GCH2, numQnt); // GCH + dist.Euclidiana
   
   printf("\n\n");  
   printf("Euclidian distance between images (GCH descriptor): %.3f\n\n", diff12);
   
   free(GCH1);
   free(GCH2);
   
   return;
}

int main(int argc, char *argv[]){

	const char *file1, *file2;
      	file1 = argv[1];
	file2 = argv[2];
	IplImage *im1, *im2;
   	int numQnt = 64;
   
   	// inicializacao com zero
   	im1 = im2 = 0;

   	// avisa usuario se ele nao passar imagem como argumento
   	if (argc < 2) {
		printf("Usage: program <image1> <image2>\n\7");
		exit(0);
   	}
	
   	im1 = cvLoadImage(file1, CV_LOAD_IMAGE_UNCHANGED);  // BGR  -- RGB
   	// verifica se conseguiu abrir arquivo 1
   	if (!im1) {
		printf("Cound not open image file 1\n");
		exit(0);
   	}
   	im2 = cvLoadImage(file2, CV_LOAD_IMAGE_UNCHANGED);  // BGR  -- RGB
   	// verifica se conseguiu abrir arquivo 2
   	if (!im2) {
		printf("Cound not open image file 2\n");
		exit(0);
   	}

	//comparacao
	descritores(im1, im2, numQnt);


	// cria uma janela para exibir a imagem
      	cvNamedWindow("Input",0);
      	cvNamedWindow("Output",0);
      
      	// exibe as imagens nas janelas
      	cvShowImage("Input", im1);
      	cvShowImage("Output", im2);
      	cvWaitKey(0); // aguarda o usuario digitar uma tecla
      
      	// grava no disco a imagem processada
      	//cvSaveImage(file2, im2, 0);
      
      	// libera a memoria alocada para as imagens
      	cvReleaseImage(&im1);
      	cvReleaseImage(&im2);
      	return 0;
}
